﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sistema.NFe.WebServiceNFe;
using System.Security.Cryptography.X509Certificates;
using Sistema.Util;
using System.Xml;
using Sistema.Dominio;
using Sistema.NFe.Xml.Interfaces;

namespace Sistema.NFe.WebServiceNFe
{
    public class EnviarNFe : WebServiceNFe
    {
        public EnviarNFe()
            : base()
        { }

        public NFeDadosEnvioVO Enviar(String Xml, X509Certificate2 certificado)
        {
            String XmlAssinado = new AssinaXML().AssinarXML(Xml, "infNFe", certificado).OuterXml;

            IXmlNFe XmlNfe = new Sistema.NFe.Xml.XmlFactory().GetNFeReference();
            XmlNfe.Xml = XmlAssinado;
            IXmlEnvioNFe XmlEnvioNFe = new Sistema.NFe.Xml.XmlFactory().GetEnvioNFeReference();
            XmlEnvioNFe.AdcionarNFe(XmlNfe);
            XmlEnvioNFe.IdLote = 1;
            XmlEnvioNFe.Versao = base.GetVersao(base._versao);
            
            XmlDocument DocumentoEnvioNFe = new XmlDocument();
            DocumentoEnvioNFe.LoadXml(XmlEnvioNFe.Xml);

            IRecepcaoNFe ws = base.RecepcaoNFe();
            ws.DefinirCertificado(certificado);
            ws.DefinirCabecalho(((int)base._cUF).ToString(), base.GetVersao(base._versao));
            XmlNode DocumentoRetornoEnvioNFe = ws.RecepcaoNFe(DocumentoEnvioNFe);

            IXmlRetornoEnvioNFe XmlRetEnvio = new Sistema.NFe.Xml.XmlFactory().GetRetEnvioReference();
            XmlRetEnvio.Xml = DocumentoRetornoEnvioNFe.OuterXml;

            NFeDadosEnvioVO dadosretorno = new NFeDadosEnvioVO();
            dadosretorno.Xml = Xml;
            dadosretorno.Status = XmlRetEnvio.Status.ToString();
            dadosretorno.Recibo = XmlRetEnvio.Recibo.ToString();
            dadosretorno.ChaveNFe = XmlNfe.IdNota;
            dadosretorno.XmlAssinado = XmlNfe.Xml;
            return dadosretorno;
        }
    }
}
